package br.com.minhascontas.activity.relatorio;

import java.util.List;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import br.com.example.minhascontas.R;
import br.com.minhascontas.DAO.LancamentoDAO;
import br.com.minhascontas.activity.lancamento.NovoLancamento;
import br.com.minhascontas.listview.ListViewHeader;
import br.com.minhascontas.listview.ListViewLancamentos;
import br.com.minhascontas.model.Lancamentos;

public class ExibirLancamentos extends ListActivity {

	private LancamentoDAO lancamentoDAO = new LancamentoDAO(this);

	private Lancamentos lancamento = new Lancamentos();
	private List<Lancamentos> lancamentos;

	private String strAnoSelecionado = "";
	private String strMesSelecionado = "";

	private String strAnoDe;
	private String strMesDe;
	private String strDiaDe;
	private String strAnoAte;
	private String strMesAte;
	private String strDiaAte;

	private String strGrupo;
	private String strItemGrupo;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		strAnoSelecionado = (String) getIntent().getSerializableExtra(
				"AnoSelecionado");
		strMesSelecionado = (String) getIntent().getSerializableExtra(
				"mesSelecionado");

		strAnoDe = (String) getIntent().getSerializableExtra("intAnoDe");
		strMesDe = (String) getIntent().getSerializableExtra("intMesDe");
		strDiaDe = (String) getIntent().getSerializableExtra("intDiaDe");
		strAnoAte = (String) getIntent().getSerializableExtra("intAnoAte");
		strMesAte = (String) getIntent().getSerializableExtra("intMesAte");
		strDiaAte = (String) getIntent().getSerializableExtra("intDiaAte");

		strGrupo = (String) getIntent().getSerializableExtra("grupo");

		strItemGrupo = (String) getIntent().getSerializableExtra("item");

		// relatorio mensal
		if (strAnoSelecionado != null && strMesSelecionado != null) {
			lancamento.setAno(Integer.parseInt(strAnoSelecionado));
			lancamento.setMes(Integer.parseInt(strMesSelecionado));
			carregaLista(lancamento.getAno(), lancamento.getMes());

			// relatorio por periodo
		} else if (strAnoDe != null && strMesDe != null && strDiaDe != null
				&& strAnoAte != null && strMesAte != null && strDiaAte != null) {

			int MesDe = Integer.parseInt(strMesDe);
			int DiaDe = Integer.parseInt(strDiaDe);
			int MesAte = Integer.parseInt(strMesAte);
			int DiaAte = Integer.parseInt(strDiaAte);

			if (MesDe < 10) {
				strMesDe = "0" + MesAte;
			}
			if (MesAte < 10) {
				strMesAte = "0" + MesDe;
			}
			if (DiaAte < 10) {
				strDiaAte = "0" + DiaAte;
			}
			if (DiaDe < 10) {
				strDiaDe = "0" + DiaDe;
			}

			String dataDe = strAnoDe + "-" + strMesDe + "-" + strDiaDe;
			String dataAte = strAnoAte + "-" + strMesAte + "-" + strDiaAte;

			carregaListaPorPeriodo(dataDe, dataAte);

			// relatorio por Grupo
		} else if (strGrupo != null) {

			int intIdGrupo = Integer.parseInt(strGrupo);
			carregaListaPorGrupo(intIdGrupo);

			// relatorio por item
		} else if (strItemGrupo != null) {

			int intIdItem = Integer.parseInt(strItemGrupo);
			carregaListaPorItem(intIdItem);
		}

		getListView().setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> adapter, View view, int pos,
					long id) {

				Intent edit = new Intent(ExibirLancamentos.this,
						NovoLancamento.class);
				edit.putExtra("LancamentoSelecionado",
						(Lancamentos) getListView().getItemAtPosition(pos));
				startActivity(edit);
			}
		});
	}

	private void carregaLista(int ano, int mes) {

		lancamentos = lancamentoDAO.listarLancamentosByMesANDAno(ano, mes);
		
		lancamentoDAO.close();
		
		somaValores(lancamentos);

		// chama lista customizada
		
		setListAdapter(new ListViewLancamentos(this, lancamentos));

	}

	private void carregaListaPorPeriodo(String dateDe, String dataAte) {
		lancamentos = lancamentoDAO.listarLancamentosByPeriodo(dateDe, dataAte);
		lancamentoDAO.close();

		somaValores(lancamentos);

		setListAdapter(new ListViewLancamentos(this, lancamentos));
	}

	private void carregaListaPorGrupo(int intIdGrupo) {
		lancamentos = lancamentoDAO.listarLancamentosByGrupo(intIdGrupo);
		lancamentoDAO.close();

		somaValores(lancamentos);

		setListAdapter(new ListViewLancamentos(this, lancamentos));
	}

	private void carregaListaPorItem(int intIdItem) {
		lancamentos = lancamentoDAO.listarLancamentosByItem(intIdItem);
		lancamentoDAO.close();

		somaValores(lancamentos);

		setListAdapter(new ListViewLancamentos(this, lancamentos));
	}
	
	//soma os valores de todos lan�amentos listados e cria Header
	private void somaValores(List<Lancamentos> clsLancamentos) {
		
		double dblTotalLancamento = 0;
		for (int i = 0; i < lancamentos.size(); i++) {
			dblTotalLancamento += lancamentos.get(i).getValor();
		}
		ListViewHeader header = new ListViewHeader(this);
		getListView().addHeaderView(header.getView(dblTotalLancamento));
	}
}
